﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using SalaDeEnsayo.WebApplication.SecurityAttributes;
using SalaDeEnsayo.ApplicationService;
using SalaDeEnsayo.ApplicationService.Model.Entity;

namespace SalaDeEnsayo.WebApplication
{
    [RolUsuario]
    [RolAdminSistema]
    public partial class AdministracionProductos : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                BindGrid();
                CargarDropDownList();
                DeshabilitarCampos();
                OcultarCampos();
            }
            lblVTipo.Visible = false;
        }

        #region [ Metodos privados ]

        private void BindGrid()
        {
            ProductoService ProductoS = new ProductoService();
            grdProducto.DataSource = ProductoS.Listar(null);
            grdProducto.DataBind();
        }

        private void BindGrid(string filtro)
        {
            ProductoService ProductoS = new ProductoService();
            grdProducto.DataSource = ProductoS.Listar(filtro);
            grdProducto.DataBind();
        }

        private void LimpiarCampos()
        {
            txtId_Producto.Text = string.Empty;
            ddlTipo.SelectedValue = "0";
            txtDescripcion.Text = string.Empty;
            txtCosto.Text = string.Empty;
            txtPrecio.Text = string.Empty;
            txtCant.Text = string.Empty;
        }

        private void DeshabilitarCampos()
        {
            ddlTipo.Enabled = false;
            txtDescripcion.Enabled = false;
            txtCosto.Enabled = false;
            txtPrecio.Enabled = false;
            txtCant.Enabled = false;
            lblVTipo.Visible = false;
        }

        private void HabilitarCampos()
        {
            ddlTipo.Enabled = true;
            txtDescripcion.Enabled = true;
            txtCosto.Enabled = true;
            txtPrecio.Enabled = true;
            txtCant.Enabled = true;
            lblVTipo.Visible = false;
        }

        private void OcultarCampos()
        {
            btnActualizar.Visible = false;
            btnGuardar.Visible = false;
            btnConfirmEliminar.Visible = false;
            btnCancelar.Visible = false;
            lblVTipo.Visible = false;
        }

        private void CargarDropDownList()
        {
            TipoProductoService TipoProductoS = new TipoProductoService();
            List<TipoProducto> ListTP = TipoProductoS.ObtenerTodos();

            ddlTipo.Items.Clear();
            ddlTipo.Items.Add(new ListItem ("Seleccione","0"));
            ddlTipo.Items.AddRange(ListTP.Select(T=>new ListItem(T.Descripcion,T.Id_Tipo.ToString())).ToArray());
            //ddlTipo.DataSource = TipoProductoS.ObtenerTodos();
            //ddlTipo.DataBind();
        }

        private void CargarCamposProducto(Producto producto)
        {
            if (producto == null)
                return;

            txtId_Producto.Text = producto.Id_Producto.ToString();
            ddlTipo.SelectedValue = producto.Id_tipo.ToString();
            txtDescripcion.Text = producto.Descripcion;
            txtCosto.Text = producto.Costo.ToString();
            txtPrecio.Text = producto.Precio_Venta.ToString();
            txtCant.Text = producto.Cantidad.ToString();            
        }

        #endregion

        protected void grdProducto_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            grdProducto.PageIndex = e.NewPageIndex;
            BindGrid();
        }

        protected void btnModificar_Click(object sender, EventArgs e)
        {
            string[] var = ((ImageButton)sender).CommandArgument.Split(';');
            ProductoService productoS = new ProductoService();
            CargarCamposProducto(productoS.ObtenerPorId(long.Parse(var[0])));

            HabilitarCampos();
            btnGuardar.Visible = false;
            btnActualizar.Visible = true;
            btnConfirmEliminar.Visible = false;
            btnCancelar.Visible = true;
        }

        protected void btnEliminar_Click(object sender, EventArgs e)
        {
            string[] var = ((ImageButton)sender).CommandArgument.Split(';');
            ProductoService ProductoS = new ProductoService();
            CargarCamposProducto(ProductoS.ObtenerPorId(long.Parse(var[0])));

            btnGuardar.Visible = false;
            btnActualizar.Visible = false;
            btnConfirmEliminar.Visible = true;
            btnCancelar.Visible = true;
        }

        protected void btnGuardar_Click(object sender, EventArgs e)
        {

            if (ddlTipo.SelectedIndex != 0)
            {
                ProductoService ProductoS = new ProductoService();

                if (ProductoS.PuedeInsetar(txtDescripcion.Text, int.Parse(ddlTipo.SelectedValue.ToString())))
                {

                    Producto newProducto = new Producto();
                    newProducto.Descripcion = txtDescripcion.Text;
                    newProducto.Id_tipo = int.Parse(ddlTipo.SelectedValue.ToString());
                    newProducto.Costo = decimal.Parse(txtCosto.Text);
                    newProducto.Cantidad = int.Parse(txtCant.Text);
                    newProducto.Precio_Venta = decimal.Parse(txtPrecio.Text);

                    if (ProductoS.AgregarProducto(newProducto) != 0)
                    {
                        Master.ShowMessage("El producto se agregó correctamente.");
                        BindGrid();
                        LimpiarCampos();
                        DeshabilitarCampos();
                        LimpiarCampos();
                        DeshabilitarCampos();
                        btnCancelar.Visible = false;
                        btnGuardar.Visible = false;
                    }
                    else
                    {
                        Master.ShowError("Favor de corregir los datos ingresados y volver a intentar.");
                    }
                }
                else 
                {
                    Master.ShowError("El producto ingresado ya se encuentra registrado en el sistema. Modificar el dato ingresado.");
                    txtDescripcion.Focus();
                }
               
            }
           else 
           {
               lblVTipo.Visible = true;

           }


        }

        protected void btnActualizar_Click(object sender, EventArgs e)
        {
            ProductoService ProductoS = new ProductoService();
            Producto newProducto = new Producto();

            newProducto.Id_Producto = long.Parse(txtId_Producto.Text);
            newProducto.Descripcion = txtDescripcion.Text;
            newProducto.Id_tipo = int.Parse(ddlTipo.SelectedValue.ToString());
            newProducto.Costo = decimal.Parse(txtCosto.Text);
            newProducto.Cantidad = long.Parse(txtCant.Text);
            newProducto.Precio_Venta = decimal.Parse(txtPrecio.Text);

            if (ProductoS.ModificarProducto(newProducto) != 0)
            {
                Master.ShowMessage("El producto se modificó correctamente.");
                BindGrid();
            }
            else
            {
                Master.ShowError("Ocurrió un problema inesperado, por favor intente mas tarde.");
            }

            LimpiarCampos();
            DeshabilitarCampos();
            btnCancelar.Visible = false;
            btnActualizar.Visible = false;
        }

        protected void btnConfirmEliminar_Click1(object sender, EventArgs e)
        {
            ProductoService ProductoS = new ProductoService();
            if (ProductoS.EliminarProducto(long.Parse(txtId_Producto.Text)) != 0)
            {
                Master.ShowMessage("El producto se eliminó correctamente.");
                BindGrid();
            }
            else
            {
                Master.ShowError("Ocurrió un problema inesperado, por favor intente mas tarde.");
            }
            LimpiarCampos();
            DeshabilitarCampos();
            btnCancelar.Visible = false;
            btnConfirmEliminar.Visible = false;
        }

        protected void btnAgregar_Click(object sender, EventArgs e)
        {
            HabilitarCampos();
            LimpiarCampos();
            btnGuardar.Visible = true;
            btnCancelar.Visible = true;
            btnActualizar.Visible = false;
            btnConfirmEliminar.Visible = false;
        }

        protected void btnCancelar_Click(object sender, EventArgs e)
        {
            LimpiarCampos();
            DeshabilitarCampos();
            OcultarCampos();
        }

        protected void btnBuscar_Click(object sender, EventArgs e)
        {
            BindGrid(txtBuscar.Text);
        }

        protected void TextCant_TextChanged(object sender, EventArgs e)
        {

        }

        protected void grdProducto_SelectedIndexChanged(object sender, EventArgs e)
        {

        }
    }
}
